package com.zff.rental.entity.user;


import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.zff.rental.AppConstant;
import jakarta.persistence.*;
import lombok.Data;
import org.hibernate.annotations.Comment;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;

import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 用户的Model，对应数据库
 *
 * @author HCY
 */
@Data
@Entity
@DynamicInsert()
@DynamicUpdate()
@Table(name = AppConstant.TABLE_NAME_USER)
@TableName(AppConstant.TABLE_NAME_USER)
public class UserEntity {
    /**
     * 用户ID
     */
    @Id
    @TableId
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Comment("用户ID")
    private Long userId;

    /**
     * 账户名称
     */
    @Column(length = 128, unique = true)
    @Comment("账户名称")
    private String accountName;

    /**
     * 用户昵称
     */
    @Column(length = 128)
    @Comment("用户名字")
    private String nickname;

    /**
     * password + salt 记录密码
     */
    @Column(length = 32)
    @Comment("密码")
    private String password;

    @Column(length = 32)
    @Comment("密码salt")
    private String salt;

    /**
     * 手机号码
     */
    @Column(length = 18, unique = true)
    @Comment("手机号码")
    private String phone;

    /**
     * 联系电话
     */
    @Column(length = 18)
    @Comment("联系电话")
    private String telephone;

    /**
     * 电子邮箱必须唯一(可以为空)
     */
    @Column(length = 128, unique = true)
    @Comment("电子邮箱")
    private String email;

    /**
     * 头像地址
     */
    @Column
    @Comment("头像地址")
    private String faceUrl;

    /**
     * 微信号
     */
    @Column
    @Comment("微信号")
    private String wechatNumber;

    /**
     * 微信二维码地址
     */
    @Column()
    @Comment("微信二维码地址")
    private String weChatQrCode;

    /**
     * 描述
     */
    @Column(length = 65535, columnDefinition = "TEXT")
    @Comment("描述")
    private String description;

    /**
     * 性别 0未知，1男，2女，3，第三性别
     */
    @Comment("性别 0未知，1男，2女，3，第三性别")
    private Integer gender;

    /**
     * 出生日期
     */
    @Comment("出生日期")
    private LocalDate birthday;

    /**
     * 禁用标志 0：未禁用 1：已禁用
     */
    @Column(columnDefinition = "TINYINT DEFAULT 0")
    @Comment("禁用标志 0：未禁用 1：已禁用")
    private Byte disabled;

    /**
     * 创建时间
     */
    @Column(nullable = false)
    @Comment("创建时间")
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @Comment("更新时间")
    private LocalDateTime updateTime;

    /**
     * 删除标志 0:未删除，==id:已删除
     */
    @Comment("删除标志 0:未删除，==id:已删除")
    @Column(nullable = false, columnDefinition = "BIGINT DEFAULT 0")
    private Long del;

    @PrePersist
    protected void onCreate() {
        createTime = LocalDateTime.now();
        checkData();
    }

    @PreUpdate
    protected void checkData() {
        updateTime = LocalDateTime.now();
        if ("".equals(accountName)) {
            accountName = null;
        }
        if ("".equals(phone)) {
            phone = null;
        }
        if ("".equals(email)) {
            email = null;
        }
    }
}
